package com.xxx.springboot.util;

import com.xxx.springboot.constant.RedisConstants;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;

import java.text.MessageFormat;

/**
 * 短信验证码工具类
 */
public class SmsVeriCodeUtil {

    private static final int SMS_CODE_LENGTH = 6; // 短信验证码长度
    private static final String DEFAULT_VERICODE = "918819"; // 测试用短信验证码

    /**
     * 生成6位数字短信验证码
     */
    public static String generateSmsVeriCode() {
        return RandomStringUtils.randomNumeric(SMS_CODE_LENGTH);
    }

    /**
     * 发送短信验证码
     */
    public static boolean sendSmsVeriCode(String userMobil, String content) {
        try {
//            String result = DuanXin.sendSms(userMobil, content);
            String result = "OK";
            if("OK".equals(result)) {
                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 校验短信验证码是否正确
     */
    public static boolean chkSmsVeriCode(String userMobile, String veriCode) {
        if (DEFAULT_VERICODE.equals(veriCode)) {
            return true;
        }
        String redisKey = MessageFormat.format(RedisConstants.REDIS_KEY_VERICODE_SMS, userMobile);
        String value = RedisUtil.get(redisKey);
        if (!StringUtils.isEmpty(value) && value.equals(veriCode)) { // redis中短信验证码未过期，并且相同，则验证通过
            RedisUtil.delete(redisKey); // 校验之后，删除redis中的key
            return true;
        }
        return false;
    }
    
}
